package com.prj.ufdm.cloud.ms.test.bpo._impl.jsontable;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.stereotype.Service;
import com.prj.ufdm.cloud.ms.test.bpo.jsontable.FastJsonRecordBPO;
import com.prj.ufdm.cloud.ms.test.model.jsontable.FastJsonTable;

/**
 * DESC: 数据操作接口实现类 <br>
 * @author 胡义振
 * @date 2020年3月14日
 */
@Service(value="fastJsonRecordBPO")
public class FastJsonRecordBPOImpl implements FastJsonRecordBPO {

	/**
	 * DESC: 创建插入数据SQL语句
	 * @auther 胡义振
	 * @date 2020年3月3日
	 * @param jsonTableList
	 * @return 
	 * @return
	 */
	@Override
	public String createInsertRecordSql(List<FastJsonTable>  jsonTableList) {
		List<String> executeSqlList = new ArrayList<String>();
		for(FastJsonTable jsonTable: jsonTableList) {
			// Json中的表名
			String tableName = jsonTable.getTableName(); 
			// 数据信息
			List<Map<String,String>> recordList = jsonTable.getRecordList();
			if(recordList!=null && recordList.size()>0) {
				for(int i=0;i<recordList.size();i++) {
					executeSqlList.add(createInsertSql(recordList.get(i),tableName));					
				}
			}
		}
		return String.join("\n",executeSqlList);
	}


	/**
	 * DESC: 创建插入一条SQL
	 * @auther 胡义振
	 * @date 2020年3月4日
	 * @param mapTable
	 * @param tableName
	 * @return 
	 * @return
	 */
	private String createInsertSql(Map<String,String> mapTable,String tableName){
		StringBuffer insertSql = new StringBuffer();
		Set<String> keys = mapTable.keySet();
		if(keys!=null && keys.size()>0) {
			String[] strKeys = keys.toArray(new String[0]);
			insertSql.append("insert into "+tableName+" (");
			// 第一次循环取字段
			for(int j=0;j<strKeys.length;j++) {
				if(j!=keys.size()-1) {
					insertSql.append(""+strKeys[j]+",");
				}
				else {
					insertSql.append(strKeys[j]);
				}
			}
			insertSql.append(") values (");
			// 第二次循环取值
			for(int j=0;j<strKeys.length;j++) {
				String value =  mapTable.get(strKeys[j]);
				if(value.equals("[]")) {
					value = "";
				}
				if(j!=keys.size()-1) {
					insertSql.append("'" + value + "',");
				}
				else {
					insertSql.append("'" + value + "'");
				}
			}
			insertSql.append(");");
		}
		return insertSql.toString();
	}
	
}
